package persistencia;

import java.sql.Statement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import javax.swing.UIManager;
import outros.Conexao;
import transporte.TOGenerico;

public class DAOGenerico {
    private Conexao conexao = new Conexao();
    private Connection con = null;

    public boolean abrirConexao() {
        UIManager.put("OptionPane.yesButtonText", "Sim");
        UIManager.put("OptionPane.noButtonText", "Não");
        UIManager.put("OptionPane.cancelButtonText", "Cancelar");
        try {
            conexao.abrirConexao();
            con = conexao.getConexao();
            return true;
        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro ao tentar conectar ao banco de dados.");
            return false;
        }
    }

    public ArrayList<TOGenerico> selecionarGenerico(String tabela, String campoOrdenador) {
        Statement st = null;
        ResultSet rs = null;
        String sql = "";
        sql = "SELECT * FROM patri_"+tabela+" ORDER BY "+campoOrdenador+" ASC";
        try {
            abrirConexao();
            st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = st.executeQuery(sql);
            ArrayList<TOGenerico> genericos;
            if (rs.first()) {
                genericos = new ArrayList();
                TOGenerico generico = new TOGenerico();
                generico.setNumero(rs.getInt("numero"));
                generico.setNome(rs.getString("nome"));
                genericos.add(generico);
                while (rs.next()) {
                    generico = new TOGenerico();
                    generico.setNumero(rs.getInt("numero"));
                    generico.setNome(rs.getString("nome"));
                    genericos.add(generico);
                }
                return genericos;
            }
            conexao.fecharConexao();
            return null;
        } catch (Exception e) {
            conexao.fecharConexao();
            JOptionPane.showMessageDialog(null, "Erro ao tentar consultar dados. Detalhes: "+e.toString());
            return null;
        }
    }

    public String selecionarCampo(String tabela, String campo, Integer id) {
        Statement st = null;
        ResultSet rs = null;
        String sql = "";
        sql = "SELECT "+campo+" FROM patri_"+tabela+" WHERE numero="+id;
        try {
            abrirConexao();
            st = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            rs = st.executeQuery(sql);
            if (rs.first()) {
                return rs.getString(campo);
            }
            conexao.fecharConexao();
            return null;
        } catch (Exception e) {
            conexao.fecharConexao();
            JOptionPane.showMessageDialog(null, "Erro ao tentar selecionar campo, no DAOGenerico. Detalhes: "+e.toString());
            return null;
        }
    }
}
